内容检查


内容检查或者应用签名能够阻止正式应用中加载非签名文件 . 提供密钥对 , 'verified_contents.json'文件为应用的签名文件 , 通过'sign.py'工具创建私钥文件private_key.pem . 公钥文件构建在NW.js应用中 . 在应用目录中调用nw --verify-content=enforce_strict .命令 , 之后显示签名页面 , 完成签名动作 . 之后对index.html文件进行一些修改 , 再次运行应用 , NW将提示文件不可用并退出 .

!!! 注意 内容检查或者应用签名不能阻止有些人黑进你的应用 , 或者使用其他NW代码加载你的应用 . 可以考虑使用C++编写 , Node.js和NaCl加载 , 以及nwjc编译JS代码

应用签名

使用密钥对签名应用 , 步骤如下:

  1. 切换到应用目录中 .
  2. 确认verified_contents.json or computed_hashes.json文件不在当前目录 , 如果存在删除 .
  3. 运行payload.exe生成payload.json文件 , 作为sign.py的配置文件
  4. 运行python sign.py > /tmp/verified_contents.json , 需要注意tmp目录不能是应用所在目录 .
  5. 将生成的verified_contents.json文件拷贝到应用目录 , 完成签名动作 .

通过密钥对重新构建应用

重修构造NW , 使密钥对生效 . 构建过程需要使用命令行参数--verify-content= , 同时需要设置enforce_strict

  1. openssl genrsa -out private_key.pem 2048生成密钥对 , 输出公钥和私钥两个文件
  2. 运行python convertkey.py , 生成的C代码将覆盖公钥文件原有内容 .
  3. 将生成的代码复制到content/nw/src/nw_content_verifier_delegate.cc , 替换原文件的默认key值 .
  4. 更改文件中第73行为Mode experiment_value = ContentVerifierDelegate::ENFORCE_STRICT;
  5. 重新构建NW

工具中 , 样例应用和样例私钥在tools/sign目录中 . 该样例私钥匹配官方构建NW公钥 .